﻿
//==============================================================================
// 文件     ：DateTimeExt.cs
// 功能概要 ：DateTime的扩展方法
//           
//           
// 作者    ：周薇
// 时间    ：2011年5月16日
// Copyright (c) 2011 重庆安运科技公司. All rights reserved.
//==============================================================================

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Webcar.Utils
{
    public static class DateTimeExt
    {
        /// <summary>
        /// 返回2个日期的天数差值
        /// </summary>
        /// <param name="end"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static int DayDiff(this DateTime end, DateTime start)
        {
            return (int)(end - start).Duration().TotalDays;
        }
        /// <summary>
        /// TimeSpan加上当天日期转换为DateTime
        /// </summary>
        /// <param name="ts"></param>
        /// <returns></returns>
        public static DateTime ToDateTime(this TimeSpan ts)
        {
            return new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, ts.Hours, ts.Minutes, ts.Seconds);
        }
        /// <summary>
        /// 按照默认格式yyyy-MM-dd生成日期字符串
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string ToDefaultDateString(this DateTime dt)
        {
            return dt.ToString("yyyy-MM-dd");
        }
        /// <summary>
        /// 按照默认格式yyyy-MM-dd HH:mm:ss生成日期字符串
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string ToDefaultDateTimeString(this DateTime dt)
        {
            return dt.ToString("yyyy-MM-dd HH:mm:ss");
        }
        /// <summary>
        /// 是否DateTime的时间部分为空
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static bool IsNullTime(this DateTime dt)
        {
            return dt.TimeOfDay.IsNullTime();
        }

        public static string Format(this TimeSpan ts,string format)
        {
            return ts.ToDateTime().ToString(format);
        }
        /// <summary>
        /// 是否空的TimeSpan
        /// </summary>
        /// <param name="ts"></param>
        /// <returns></returns>
        public static bool IsNullTime(this TimeSpan ts)
        {
            return ts.TotalMilliseconds==0;
        }
        /// <summary>
        /// 是否日期==初始值
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static bool IsNullDateTime(this DateTime dt)
        {
            return dt == DateTime.MinValue;
        }

        
        /// <summary>
        /// 转换为中文日期 如2005年11月5日
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string ToDateStringCN(this DateTime dt)
        {
            return string.Format("{0:D}", dt);//2005年11月5日
        }
        public static string ToString12(this DateTime dt)
        {
            return dt.ToString("yyMMddHHmmss");
        }
        public static string ToString6(this DateTime dt)
        {
            return dt.ToString("HHmmss");
        }

        public static DateTime? ToNullableDateTime(this DateTime value)
        {
            if (value == DateTime.MinValue)
            {
                return null;
            }
            else
            {
                return new DateTime?(value);
            }
        }
        /// <summary>
        /// 将星期转换为中文
        /// </summary>
        /// <param name="wk"></param>
        /// <returns></returns>
        public static string ToWeekStringCN(this DayOfWeek wk)
        {
            string[] cnweekdaynames = { "日", "一", "二", "三", "四", "五", "六" };

            return "星期" + cnweekdaynames[(int)wk];
        }
        public static DateTime AddTimeSpan(this DateTime date, TimeSpan time)
        {
            return new DateTime(date.Year,
                                  date.Month,
                                  date.Day,
                                  time.Hours,
                                  time.Minutes,
                                  time.Seconds);
        }
    }
}
